翻訳と辞書
Words near each other
・ COPUS
・ COPUS (band)
・ Copus massacre
・ Copwatch
・ Copy
・ Copy & Pastry
・ Copy (album)
・ Copy (command)
・ Copy (musician)
・ Copy (written)
・ Copy and paste programming
・ Copy attack
・ Copy boy
・ Copy Cats (album)
・ Copy Cats (short story collection)
Copy constructor (C++)
・ Copy Control
・ Copy Control Information
・ Copy Cursor
・ Copy editing
・ Copy elision
・ Copy Exactly!
・ Copy number analysis
・ Copy of a
・ Copy of Lute Player by Frans Hals
・ Copy propagation
・ Copy protection
・ Copy stand
・ Copy testing
・ Copy to China


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

Copy constructor (C++) : ウィキペディア英語版
Copy constructor (C++)
In the C++ programming language, a copy constructor is a special constructor for creating a new object as a copy of an existing object. Copy constructors are the standard way of copying objects in C++, as opposed to cloning, and have C++-specific nuances.
The first argument of such a constructor is a reference to an object of the same type as is being constructed (const or non-const), which might be followed by parameters of any type (all having default values).
Normally the compiler automatically creates a copy constructor for each class (known as an implicit copy constructor) but for special cases the programmer creates the copy constructor, known as a user-defined copy constructor. In such cases, the compiler does not create one. Hence, there is always one copy constructor that is either defined by the user or by the system.
A user-defined copy constructor is generally needed when an object owns pointers or non-shareable references, such as to a file, in which case a destructor and an assignment operator should also be written (see Rule of three).
== Definition ==

Copying of objects is achieved by the use of a copy constructor and an assignment operator. A copy constructor has as its first parameter a (possibly const or volatile) reference to its own class type. It can have more arguments, but the rest must have default values associated with them.〔INCITS ISO IEC 14882-2003 12.8.2. ''()''〕 The following would be valid copy constructors for class X:

X(const X& copy_from_me);
X(X& copy_from_me);
X(volatile X& copy_from_me);
X(const volatile X& copy_from_me);
X(X& copy_from_me, int = 0);
X(const X& copy_from_me, double = 1.0, int = 42);
...

The first one should be used unless there is a good reason to use one of the others. One of the differences between the first and the second is that temporaries can be copied with the first. For example:

X a = X(); // valid given X(const X& copy_from_me) but not valid given X(X& copy_from_me)
// because the second wants a non-const X&
// to create a, the compiler first creates a temporary by invoking the default constructor
// of X, then uses the copy constructor to initialize as a copy of that temporary.
// For some compilers both versions actually work but this behaviour should not be relied
// upon because it's non-standard.

Another difference between them is the obvious:

const X a;
X b = a; // valid given X(const X& copy_from_me) but not valid given X(X& copy_from_me)
// because the second wants a non-const X&

The X& form of the copy constructor is used when it is necessary to modify the copied object. This is very rare but it can be seen used in the standard library's std::auto_ptr. A reference must be provided:

X a;
X b = a; // valid if any of the copy constructors are defined
// since a reference is being passed.

The following are invalid copy constructors (Reason - copy_from_me is not passed as reference) :

X(X copy_from_me);
X(const X copy_from_me);

because the call to those constructors would require a copy as well, which would result in an infinitely recursive call.
The following cases may result in a call to a copy constructor:
# When an object is returned by value
# When an object is passed (to a function) by value as an argument
# When an object is thrown
# When an object is caught
# When an object is placed in a brace-enclosed initializer list
These cases are collectively called ''copy-initialization'' and are equivalent to:〔ISO/IEC (2003). ''ISO/IEC 14882:2003(E): Programming Languages - C++ §8.5 Initializers ()'' para. 12〕
T x = a;
It is however, not guaranteed that a copy constructor will be called in these cases, because the C++ Standard allows the compiler to optimize the copy away in certain cases, one example being the return value optimization (sometimes referred to as RVO).

抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「Copy constructor (C++)」の詳細全文を読む



スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.